<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * @property Doctrine $doctrine Biblioteca ORM
 * Controller para gerenciar scripts de teste
 *
 */
class ScriptTeste extends AdminController {

    /**
     * Metodo para listar os cadastros
     *
     * @param int $offset Registro inicial
     */
    public function index( $page = 0 ) {
        $findBy = array();
        if( isNotBlank( $this->input->post( 'nome' ) ) ) {
            $findBy = array_merge( $findBy, array( 'nome' => $this->input->post( 'nome' ) ) );
        }
        $offset = 0;
        if( $page != 0 ) {
            $offset = ($page-1)*LIMITE_PAGINACAO_ADMIN;
        }
        $lista = $this->doctrine->em->getRepository( 'ScriptsTestes' )->findBy(
                $findBy, 
                NULL, 
                LIMITE_PAGINACAO_ADMIN, 
                $offset
            );
        
        $total = count($lista);

        $this->assign( 'lista', $lista );
        $this->assign( 'total', $total );

        $this->display( 'scriptteste/index' );
    }

    /**
     * Exibe a tela de inserção/alteração
     *
     * @param int 
     */
    public function editar( $id = null ) {
        if( !empty( $id ) && $_SERVER['REQUEST_METHOD'] == 'GET' ) {
            $obj = $this->doctrine->em->getRepository( 'ScriptsTestes' )->find( $id );
            // colocamos os dados na variavel $_POST
            $_POST = (array) $obj;
        }
        $this->assign( 'casos_testes', $this->getCasosTestes() );
        $this->display( 'scriptteste/editar' );
    }

    /**
     * Insere um novo objeto ou altera um existente
     *
     * @param int
     */
    public function salvar( $id = null ) {
        $dao = new ScriptsTestes();
        // se está editando (informou o código)
        if( !empty( $id ) ) {
            // pegamos o registro do banco de dados
            $dao = $this->doctrine->em->getRepository( 'ScriptsTestes' )->find( $id );
        }
        populateForm( $dao, $this->input->post() );
        
        $this->doctrine->em->persist( $dao );
        $this->doctrine->em->flush();
        
        $this->saveOrUpdateCasosScripts( $dao->get_id_caso_teste(), $dao->get_id_script_teste() );

        redirect( 'admin/scriptteste/index' );
    }

    /**
     * Remove um aluno
     *
     * @param int 
     */
    public function remover( $id ) {
        if( !empty( $id ) ) {
            // removemos o objeto
            $dao = $this->doctrine->em->getRepository( 'ScriptsTestes' )->find( $id );
            if( $dao != null ) {
                $this->doctrine->em->remove( $dao );
                $this->doctrine->em->flush();
            }
        }
        redirect('admin/scriptteste/index');
    }
    
    /////////////////////////////////////////////////////////////////////////
    
    private function getCasosTestes() {
        $sql = "
            select
                ct.*
            from
                casos_testes ct
                    inner join projetos p   
                    on ct.id_projeto = p.id_projeto
                    inner join suites_testes st
                    on p.id_suite_teste = st.id_suite_teste
            order by ct.nome
            ";
        $stmt = $this->doctrine->em->getConnection()->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll();
    }
    
    private function saveOrUpdateCasosScripts( $id_caso_teste, $id_script_teste ) {
        $sql = "SELECT * FROM casos_scripts WHERE id_script_teste = $id_script_teste";
        $stmt = $this->doctrine->em->getConnection()->prepare( $sql );
        $stmt->execute();
        $caso_script = $stmt->fetchAll();
        if( isNotBlank( $caso_script ) && count( $caso_script ) > 0 ) {
            // alteração
            $sql = "UPDATE casos_logs SET id_caso_teste = $id_caso_teste WHERE id_script_teste = $id_script_teste";
        } else {
            // inserção
            $sql = "INSERT INTO casos_scripts(id_caso_teste, id_script_teste) VALUES($id_caso_teste, $id_script_teste)";
        }
        $stmt = $this->doctrine->em->getConnection()->prepare( $sql );
        $stmt->execute();
    }
}
/* End of file suite.php */
/* Location: ./application/controllers/admin/suite.php */